package com.itbaizhan.myorder;

import org.springframework.amqp.core.*;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.HashMap;
import java.util.Map;

//用插件的延迟队列(推荐使用)
@Configuration
public class RabbitConfig2 {
    //延迟的交换机和队列
    private final String DELAYED_EXCHANGE="delayed_exchange";
    private final String DELAYED_QUEUE="delayed_queue";

    //延迟交换机
    @Bean(DELAYED_EXCHANGE)
    public Exchange delayedExchange(){
        //创建自定义交换机
        Map args = new HashMap();
        args.put("x-delayed-type","topic");
        /*参数1：交换机名  参数2：交换机类型  参数3：是否持久化  参数4：是否自动删除  参数5：配置*/
        return new CustomExchange(DELAYED_EXCHANGE,"x-delayed-message",true,false,args);
    }

    //延迟队列  不可以设置延迟时间 在发送消息时才可以设置延迟时间
    @Bean(DELAYED_QUEUE)
    public Queue delayedQueue(){
        return QueueBuilder
                .durable(DELAYED_QUEUE)
                .build();
    }

    //队列绑定到交换机
    @Bean
    public Binding bindingDelayedQueue(@Qualifier(DELAYED_EXCHANGE)Exchange exchange ,@Qualifier(DELAYED_QUEUE)Queue queue){
            return BindingBuilder
                    .bind(queue)
                    .to(exchange)
                    .with("order_routing")
                    .noargs();
    }
}
/*插件上传至虚拟机
cd /
用ftp上传


安装插件

# 将插件放入RabbitMQ插件目录中
mv rabbitmq_delayed_message_exchange-3.9.0.ez /usr/local/rabbitmq/plugins/
# 启用插件
rabbitmq-plugins enable rabbitmq_delayed_message_exchange
重启RabbitMQ服务

#停止rabbitmq
rabbitmqctl stop

#启动rabbitmq
rabbitmq-server restart -detached


此时登录管控台可以看到交换机类型多了延迟消息
在Exchanges   的Add a new exchange  的type 查看有没有 x-delayed-message
如果有就代表安装成功*/